import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './router'
import {getStorage} from '@/utils/common'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css' //这个样式必须引入
Vue.use(VueRouter)

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes,
  scrollBehavior(to, from, savePosition) { 
    // 注意: 这个功能只在 HTML5 history 模式下可用。测试时发现除了history也可以用，奇怪
    // 在点击浏览器的“前进/后退”，或者切换导航的时候触发。
    // to：要进入的目标路由对象，到哪里去  from：离开的路由对象，哪里来 savePosition：会记录滚动条的坐标，点击前进/后退的时候记录值{x:?,y:?}
    if (savePosition && to.meta.keepAlive) {
      return savePosition
    } else {
      return { x: 0, y: 0 }
    }
  },
})
//挂载路由导航守卫
router.beforeEach((to, from, next) => {
  //to代表将要访问的路径
  //from从哪个页面出发
  //next是一个函数，表示放行

  NProgress.start()
  if((to.path =="/market") && to.hash.length > 2){
    return next({ path:`/login${to.hash}`})
  }
  // 路由白名单，不需要登陆
  const Whitelist = ['/launchPage', '/login', '/test', '/register', '/forgetPassword']
  if (Whitelist.includes(to.path)) return next();
  if (!to.meta.requireAuth) {
    //获取本地的token
    // const tokenStr = getCookie('token');
    const tokenStr = getStorage('token');
    if (tokenStr) {
      return next();
    } else {
      console.log(to);
      return next({ path:`/login`})
    }
  }
  next()
})
router.afterEach((to, from) => {
  NProgress.done()
})
//解决路由报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

export default router

